<script setup lang="ts">
//意外的全局变量

let _window = window as any
function MyObject() { }
//大一点的数组 里面装这个类型 //可以执行map
(function () {
  //fill初始化数组
  let arr = new Array(20).fill(null).map(e => new (MyObject as any)())
  //将数据挂载到window上
  //对于大数组进行了2次强引用，GC计数器发现2次强引用被赋值为null,
  // 最终计算结果为0的时候，垃圾回收机制会回收
  _window['arr1'] = arr;
  _window['arr2'] = arr;
  _window['arr3'] = arr;
})();

// 解决方法1(单个)：
// _window.arr2 = null;//直接让arr2指向一个空,之前数据没用，就会被回收

//解决该数据地址多方用：
_window.arr2.length = 0;//这样就可以删除数组

// arr = [] 和 arr.length = 0 的区别？
var arr1 = [1, 2, 3]
var arr2 = [4, 5, 6]
var newArr1 = arr1
var newArr2 = arr2
console.log(arr1, newArr1, arr2, newArr2)
// [1, 2, 3] [1, 2, 3] [4, 5, 6] [4, 5, 6]
arr1 = []
arr2.length = 0
console.log(arr1, newArr1, arr2, newArr2)
// [] [1, 2, 3] [] []

// arr = []，重新开辟一块内存，其它引用不受影响。
// arr的指针指向这个空数组的内存，原有的内存数据还存在
// 这意味着对先前数组的赋值任然保留在内存中，从而导致内存泄露

// arr.length = 0，删除当前数组中的全部内容，但不影响与其他的关联性
</script>

<template>
  <div>内存泄漏-全局变量</div>
  <!-- https://wap.sciencenet.cn/blog-811611-1176330.html?mobile=1 -->
</template>

<style scoped>

</style>
